Apache Flink এ Window Aggregation এবং Window Function স্ট্রিম ডেটা প্রসেসিং-এর ক্ষেত্রে ডেটা এনালাইসিস এবং ট্রান্সফর্মেশনের জন্য অত্যন্ত গুরুত্বপূর্ণ। Flink এ উইন্ডোর মধ্যে অ্যাগ্রিগেশন এবং ফাংশন ব্যবহার করে ডেটা প্রক্রিয়াকরণ করা যায়, যেমন গাণিতিক গণনা (sum, average), জটিল প্রসেসিং, এবং ডেটার ট্রান্সফর্মেশন। Flink এর Window Function গুলো উইন্ডোতে জমা হওয়া ডেটা প্রক্রিয়া করে আউটপুট তৈরি করতে সাহায্য করে।
Window Aggregation এর মাধ্যমে Flink বিভিন্ন ধরনের অ্যাগ্রিগেটিভ অপারেশন করতে পারে, যেমন sum
, min
, max
, average
, এবং কাস্টম অ্যাগ্রিগেশন। Flink এ উইন্ডো অ্যাগ্রিগেশন করার জন্য বেশ কিছু বিল্ট-ইন ফাংশন রয়েছে যা দ্রুত এবং সহজে ডেটা প্রক্রিয়া করতে সহায়ক।
sum()
অ্যাগ্রিগেশনDataStream<Tuple2<String, Integer>> windowCounts = input
.keyBy(value -> value.f0)
.window(TumblingEventTimeWindows.of(Time.seconds(10)))
.sum(1);
উপরের উদাহরণে:
keyBy
অপারেশনের মাধ্যমে কী অনুযায়ী ভাগ করা হয়েছে।sum
ফাংশন ব্যবহার করে দ্বিতীয় ফিল্ডের মানগুলো যোগ করা হয়েছে।min()
: উইন্ডোর মধ্যে সর্বনিম্ন মান প্রদান করে।max()
: উইন্ডোর মধ্যে সর্বাধিক মান প্রদান করে।minBy()
/ maxBy()
: উইন্ডোর মধ্যে নির্দিষ্ট ফিল্ড অনুযায়ী সর্বনিম্ন বা সর্বাধিক রেকর্ড প্রদান করে।Flink এ উইন্ডো ফাংশনগুলি আরও ফ্লেক্সিবল এবং কাস্টম ডেটা প্রসেসিং করার সুযোগ দেয়। প্রধান উইন্ডো ফাংশনগুলোর মধ্যে রয়েছে:
AggregateFunction একটি জেনেরিক এবং ফ্লেক্সিবল উইন্ডো ফাংশন, যা উইন্ডোর মধ্যে অ্যাগ্রিগেশন করতে ব্যবহৃত হয়। এটি ব্যবহার করে কাস্টম অ্যাগ্রিগেশন করা যায় এবং এটি স্টেটফুল অ্যাগ্রিগেশন সাপোর্ট করে।
DataStream<Tuple2<String, Double>> avgStream = input
.keyBy(value -> value.f0)
.window(TumblingEventTimeWindows.of(Time.minutes(5)))
.aggregate(new AverageAggregate());
public class AverageAggregate implements AggregateFunction<Tuple2<String, Integer>, Tuple2<Integer, Integer>, Double> {
@Override
public Tuple2<Integer, Integer> createAccumulator() {
return Tuple2.of(0, 0); // (sum, count)
}
@Override
public Tuple2<Integer, Integer> add(Tuple2<String, Integer> value, Tuple2<Integer, Integer> accumulator) {
return Tuple2.of(accumulator.f0 + value.f1, accumulator.f1 + 1);
}
@Override
public Double getResult(Tuple2<Integer, Integer> accumulator) {
return accumulator.f1 == 0 ? 0 : (double) accumulator.f0 / accumulator.f1;
}
@Override
public Tuple2<Integer, Integer> merge(Tuple2<Integer, Integer> a, Tuple2<Integer, Integer> b) {
return Tuple2.of(a.f0 + b.f0, a.f1 + b.f1);
}
}
উপরের উদাহরণে:
AverageAggregate
ক্লাস তৈরি করা হয়েছে যা উইন্ডোর মধ্যে গড় (average) গণনা করে।createAccumulator
একটি অ্যাকুমুলেটর তৈরি করে যা উইন্ডোর জন্য স্টেট ধরে রাখে।add
মেথডটি নতুন মান অ্যাকুমুলেটরের সাথে যোগ করে।getResult
অ্যাকুমুলেটরের থেকে গড় বের করে।merge
মেথডটি অ্যাকুমুলেটরগুলিকে মার্জ করে (যদি উইন্ডো পার্টিশনিং প্রয়োজন হয়)।ProcessWindowFunction সবচেয়ে ফ্লেক্সিবল উইন্ডো ফাংশন, যা উইন্ডোর সমস্ত ইভেন্ট প্রসেস করে এবং আরও কাস্টম অপারেশন করতে দেয়। এটি উইন্ডোর মেটাডেটা, যেমন উইন্ডোর শুরু এবং শেষ সময় ব্যবহার করে আরও জটিল অপারেশন করতে সক্ষম।
DataStream<Tuple2<String, Integer>> result = input
.keyBy(value -> value.f0)
.window(TumblingEventTimeWindows.of(Time.seconds(10)))
.process(new ProcessWindowFunction<Tuple2<String, Integer>, Tuple2<String, Integer>, String, TimeWindow>() {
@Override
public void process(String key, Context context, Iterable<Tuple2<String, Integer>> elements, Collector<Tuple2<String, Integer>> out) {
int sum = 0;
for (Tuple2<String, Integer> element : elements) {
sum += element.f1;
}
out.collect(new Tuple2<>(key, sum));
}
});
এই উদাহরণে:
ProcessWindowFunction
ব্যবহার করা হয়েছে যাতে উইন্ডোর সব ইভেন্ট প্রসেস করা যায়।process
মেথডটি উইন্ডোর প্রতিটি কী এবং ইভেন্টের ইটারেবল প্রসেস করে এবং ফলাফল সংগ্রহ করে।ReduceFunction উইন্ডোর মধ্যে ডেটা রিডিউস করে একটি সিঙ্গেল ভ্যালুতে পরিণত করে। এটি সাধারণত অ্যাগ্রিগেশন ও ট্রান্সফর্মেশনের জন্য ব্যবহৃত হয়।
DataStream<Tuple2<String, Integer>> reducedStream = input
.keyBy(value -> value.f0)
.window(TumblingEventTimeWindows.of(Time.minutes(1)))
.reduce(new ReduceFunction<Tuple2<String, Integer>>() {
@Override
public Tuple2<String, Integer> reduce(Tuple2<String, Integer> value1, Tuple2<String, Integer> value2) {
return new Tuple2<>(value1.f0, value1.f1 + value2.f1);
}
});
এই উদাহরণে, ReduceFunction
ব্যবহার করে উইন্ডোর মধ্যে প্রতিটি কী অনুযায়ী ইভেন্টের মান যোগ করা হচ্ছে।
Apache Flink এ Window Aggregation এবং Window Function স্ট্রিম ডেটা প্রসেসিং এবং ডেটা ট্রান্সফর্মেশনের জন্য অত্যন্ত গুরুত্বপূর্ণ। এগুলো ডেভেলপারদের ডেটা এনালাইসিস, ট্রান্সফর্মেশন, এবং কাস্টম প্রসেসিং-এর জন্য উপযোগী টুলস প্রদান করে, যা বড় এবং জটিল ডেটাসেটের সাথে কাজ করার সময় কার্যকরী হয়।
আরও দেখুন...